package com.smartcampusbackend.service;

import com.smartcampusbackend.model.Course;
import com.smartcampusbackend.model.StudentCourse;
import java.util.List;
import java.util.Map;

public interface CourseService {
    /**
     * 获取所有课程
     * @return 课程列表
     */
    List<Course> listAllCourses();
    
    /**
     * 获取学生已选课程
     * @param studentId 学生ID
     * @return 已选课程列表
     */
    List<Course> listSelectedCourses(String studentId);
    
    /**
     * 学生选课
     * @param studentId 学生ID
     * @param courseId 课程ID
     * @return 是否成功
     */
    boolean selectCourse(String studentId, String courseId);
    
    /**
     * 学生退课
     * @param studentId 学生ID
     * @param courseId 课程ID
     * @return 是否成功
     */
    boolean withdrawCourse(String studentId, String courseId);
    
    /**
     * 获取教师课程
     * @param teacherId 教师ID
     * @return 课程列表
     */
    List<Course> listTeacherCourses(String teacherId);
    
    /**
     * 创建课程
     * @param course 课程信息
     * @return 是否成功
     */
    boolean createCourse(Course course);
    
    /**
     * 更新课程
     * @param course 课程信息
     * @return 是否成功
     */
    boolean updateCourse(Course course);
    
    /**
     * 删除课程
     * @param courseId 课程ID
     * @param teacherId 教师ID
     * @return 是否成功
     */
    boolean deleteCourse(String courseId, String teacherId);
    
    /**
     * 管理员删除课程
     * @param courseId 课程ID
     * @return 是否成功
     */
    boolean deleteCourseByAdmin(String courseId);
    
    /**
     * 根据院系和专业筛选课程
     * @param departmentId 院系ID
     * @param majorId 专业ID
     * @return 课程列表
     */
    List<Course> listCoursesByDepartmentAndMajor(Long departmentId, Long majorId);
    
    /**
     * 自动选择必修课程
     * @param studentId 学生ID
     * @param departmentId 院系ID
     * @param majorId 专业ID
     * @return 是否成功
     */
    boolean selectRequiredCourses(String studentId, Long departmentId, Long majorId);
    
    /**
     * 生成学生课程表
     * @param studentId 学生ID
     * @return 课程表数据
     */
    List<Map<String, Object>> generateCourseSchedule(String studentId);

    // 新增：支持按学生专业筛选课程
    List<Course> listAllCourses(String studentId);
} 